﻿#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)

#include <stdio.h>
#include "game.h"		//InitBoard;DisplayBoard;ROW;COL				

/*测试游戏的逻辑*/

void meau()
{
	printf("*******************************\n");
	printf("******* 1.play  0.exit ********\n");
	printf("*******************************\n");
}

void game()
{
	char ret = 0;		//接收Iswin函数的返回值
	char board[ROW][COL] = { 0 };		//定义一个三行三列的数组，存放#和*，所以用char类型
	//需要实现的功能：1.初始化棋盘；2.打印棋盘；3.玩家下棋,电脑下棋；4.判断输赢
	
	InitBoard(board, ROW, COL);			//初始化棋盘-本质上是初始化二维数组
	DisplayBoard(board, ROW, COL);		//打印棋盘-本质上打印二维数组中的元素
	while (1)
	{
		PlayerMove(board, ROW,  COL);	//玩家下棋
		ret = Iswin(board, ROW, COL);	//判断输赢；先想好怎么用Iswin，再去实现功能
		if (ret != 'c')		//若返回的不是c就代表跳出循环，游戏结束，再判断是谁赢了
		{
			break; 
		}
		DisplayBoard(board, ROW, COL);	//打印棋盘

		ComputerMove(board, ROW, COL);	//电脑下棋
		ret = Iswin(board, ROW, COL);	//判断输赢
		if (ret != 'c')
		{
			break;
		}
		DisplayBoard(board, ROW, COL);	//打印棋盘	
	}
	if (ret == '*')
	{
		printf("玩家赢，游戏结束\n");
	}
	else if (ret == '#')
	{
		printf("电脑赢，游戏结束\n");
	}
	else
	{
		printf("平局\n");
	}
	DisplayBoard(board, ROW, COL);	//打印棋盘
}

int main()
{
	srand((unsigned int)time(NULL));		//调⽤time函数参数给NULL即可返回时间戳，直接让返回值作为srand函数的参数，即种子就会不断变化
	int input = 0;							//srand函数是不需要频繁调⽤的，⼀次运⾏的程序中调⽤⼀次即可

	do
	{
		meau();		//打印菜单
		printf("请选择:>");
		scanf("%d", &input);
		if (1 == input)
		{
			//printf("游戏开始\n");		//可以先测试，再完成游戏实现的代码！
			game();
		}
		else if (0 == input)
		{
			printf("游戏结束\n");
		}
		else
		{
			printf("输入错误，请重新输入\n");
		}

		//switch (input)		//switch case语句也可实现
		//{
		//	case 1:		
		//		game();		//输入1就进入游戏
		//		break;
		//	case 0:
		//		printf("游戏结束\n");
		//		break;
		//	default:
		//		printf("选择错误,请重新输入!\n");		//当有重新输入的情况时可用do while循环
		//		break;		//跳出switch语句
		//}

	} while (input);

	return 0;
}


